//
// Created by MikeChen on 2025/4/8.
//


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct Man {
    int data
};

//取最大值
int Max1(int x, int y) {
    return x > y ? x : y;
}

//测试形参的兼容
int Max2(struct Man a, int b[20]) {
    return b[0];
}

void Test01() {
    printf("111111111111111");
    return;
    printf("2222222222222222");
}

void Swap(int x, int y) {
    x = x + y;
    y = x - y;
    x = x - y;
}

void Swap1(int* x, int* y) {
    *x = *x + *y;
    *y = *x - *y;
    *x = *x - *y;
}

int main() {
    //函数调用的基本格式 ： 函数名（实参列表）；
    int a = 10, b = 20;
    int c;
    c = Max1(a, b);
    printf("Max1=%d\n", c);
    c = Max1(a, 50);
    printf("Max1=%d\n", c);
    /*
      函数的参数：
        实参:主调函数中将值传递出去的参数称为”实际参数“（简称实参）
        形参:被调函数中用于接收主调函数所传递过来值的参数称为”形式参数“或”虚拟参数“（简称形参）
        注意点：
            1.实参可以是常量、变量或表达式
            2.实参与形参的数据类型应相同或者赋值兼容，并且实参在实参列表中的位置与形参在形参列表中的位置必须对应
            3.函数遇到return就返回了，不再执行return之后的语句
            4.形参属于局部变量只在函数内部有效
            5.函数的形参和  实参是两个不同的变量，形参值一般不影响实参值，除非函数参数的传递类型为地址传递
                未调用函数时，形参不占用存储单元，开始调用函数时，才给形参开辟存储空间，调用结束后该空间即被释放
        函数的返回值：
            函数的返回值必须与函数类型一致
    */
    struct Man m;
//    c = Max2(m, b);//编译可以通过，但是运行会错误退出
    c = Max2(m, &b);//类型兼容了，有警告，但是运行不会报错
    printf("Max2=%d\n", c);


    a = 10;
    b = 20;
    printf("第一次打印：a = %d\tb=%d\n", a, b);
    a = a + b;
    b = a - b;
    a = a - b;
    printf("在main函数中交换之后打印：a = %d\tb=%d\n", a, b);
    a = 10;
    b = 20;
    Swap(a,b);
    printf("在Swap函数中交换之后打印：a = %d\tb=%d\n", a, b);//无变化
    Swap1(&a,&b);
    printf("在Swap1函数中交换之后打印：a = %d\tb=%d\n", a, b);//无变化
    system("read -rsp $'Press enter to continue...\\n'");
    return EXIT_SUCCESS;
}